home *** CD-ROM | disk | FTP | other *** search
- #include "crc.hpp"
-
- unsigned short calc_crc(unsigned char *buf, long len)
- {
- unsigned char c1=0,c2=0;
- while (len)
- {
- len--;
- c1+=*buf;
- c2+=c1;
- buf++;
- }
- return (c2<<8)|c1;
- }
-
-
-
- ulong crc_file(bFILE *fp)
- {
- uchar crc1=0,crc2=0,crc3=0,crc4=0;
-
- int size=0x1000;
- uchar *buffer=(uchar *)jmalloc(size,"crc_buffer"),*c;
- long l=fp->file_size();
- long cur_pos=fp->tell();
- fp->seek(0,0);
- while (l)
- {
- int nr=fp->read(buffer,size);
- if (nr==0) l=0;
- else
- {
- l-=nr;
- for (c=buffer;nr;nr--,c++)
- {
- crc1+=*c;
- crc2+=crc1;
- crc3+=crc2;
- crc4+=crc3;
- }
- }
- }
- fp->seek(cur_pos,0);
- jfree(buffer);
- return (crc1|(crc2<<8)|(crc3<<16)|(crc4<<24));
- }
-